package com.fileupload.mapper;

import com.fileupload.model.entity.FileUploadLog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 文件上传日志Mapper接口
 */
@Mapper
public interface FileUploadLogMapper {
    
    /**
     * 插入上传日志
     * 
     * @param log 日志对象
     * @return 插入成功的记录数
     */
    int insert(FileUploadLog log);
    
    /**
     * 根据ID查询日志
     * 
     * @param id 日志ID
     * @return 日志对象
     */
    FileUploadLog selectById(Long id);
    
    /**
     * 查询上传失败的记录
     * 
     * @param limit 查询数量限制
     * @return 失败记录列表
     */
    List<FileUploadLog> selectFailedUploads(@Param("limit") int limit);
    
    /**
     * 根据条件查询日志
     * 
     * @param monitorName 监控名称
     * @param serverName 服务器名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param successFlag 成功标志
     * @return 日志列表
     */
    List<FileUploadLog> selectByCondition(@Param("monitorName") String monitorName,
                                         @Param("serverName") String serverName,
                                         @Param("startTime") Long startTime,
                                         @Param("endTime") Long endTime,
                                         @Param("successFlag") Integer successFlag);
    
    /**
     * 批量插入上传日志
     * 
     * @param logs 日志对象列表
     * @return 插入成功的记录数
     */
    int batchInsert(@Param("logs") List<FileUploadLog> logs);
    
    /**
     * 更新失败次数
     * 
     * @param id 日志ID
     * @param failureCount 失败次数
     * @return 更新成功的记录数
     */
    int updateFailureCount(@Param("id") Long id, @Param("failureCount") Integer failureCount);
    
    /**
     * 更新上传状态
     * 
     * @param id 日志ID
     * @param successFlag 成功标志
     * @param uploadEndTime 上传结束时间
     * @param errorMessage 错误信息
     * @return 更新成功的记录数
     */
    int updateUploadStatus(@Param("id") Long id,
                          @Param("successFlag") Integer successFlag,
                          @Param("uploadEndTime") Long uploadEndTime,
                          @Param("errorMessage") String errorMessage);
    
    /**
     * 删除指定时间之前的日志
     * 
     * @param beforeTime 指定时间
     * @return 删除成功的记录数
     */
    int deleteOldLogs(@Param("beforeTime") Long beforeTime);
}